package mpbe.estructura.secciones.hormigon_armado;

/*
 * Este codigo es software libre y se encuentra licenciado 
 * bajo los términos de la Licencia Pública General de GNU versión 3 
 * según se encuentra publicada por la Free Software Foundation.
 * http://www.gnu.org/licenses/gpl.html
 * 
 * Autor: Martin Pablo Bellanca <martin.bellanca@gmail.com>
 * web: http://mpbe.blogspot.com/
 */

import java.text.NumberFormat;

import org.eclipse.swt.SWT;
import org.json.simple.JSONObject;

import mpbe.estructura.Material;
import mpbe.estructura.MaterialesLista;
import mpbe.estructura.Unidad;

/**
 * @author  mpbe
 */
public class SHGenerales {
	public static int contador = 0;
	public static String txtDesignacion = "Nueva";
	
	public String designacion;
	//public Unidades unidades;
	/**
	 * @uml.property  name="uLongitud"
	 * @uml.associationEnd  
	 */
	public Unidad uLongitud;
	/**
	 * @uml.property  name="uFuerza"
	 * @uml.associationEnd  
	 */
	public Unidad uFuerza;
	/**
	 * @uml.property  name="hormigon"
	 * @uml.associationEnd  
	 */
	public Material hormigon;
	/**
	 * @uml.property  name="acero"
	 * @uml.associationEnd  
	 */
	public Material acero;
	public double recubrimiento;
	public double diamEstribos;
	public int canRamasEstribos;
	public double sepBarras;
	public String descripcion;
	
	
	public SHGenerales() {
		NumberFormat nf = NumberFormat.getInstance();
		// Establecemos el numero de decimales
		nf.setMaximumFractionDigits(0);
		nf.setMinimumIntegerDigits(3);
		designacion = txtDesignacion+ nf.format(++contador);
		descripcion = "";
		
		acero = new Material(); // Tipo III por defecto
		acero.Tipo = "Acero";
		acero.Designacion = "Tipo III-ADN420";
		acero.Coef_Poison = 0.3;
		acero.Coef_Dilatacion = 0;
		acero.Peso_Unitario = 0;
		acero.Bf = 42; //KN/cm2
		acero.Es = 21000;
		acero.El = 5;
		acero.Ese = 2;
		acero.Cte_Torsion = 0;
		
		hormigon = new Material(); // H-17 por defecto
		hormigon.Tipo = "Hormigon";
		hormigon.Designacion = "H-17";
		hormigon.Coef_Poison = 0.3;
		hormigon.Coef_Dilatacion = 10e-6; //TODO verificar
		hormigon.Peso_Unitario = 0;
		hormigon.Bf = 1.4; //KN/cm2
		hormigon.Es = 27500;
		hormigon.El = -3.5;
		hormigon.Ese = -2;
		hormigon.Cte_Torsion = 0;
		
		//unidades = new Unidades();
		uFuerza = new Unidad();
		uFuerza.Designacion = "KN";
		uFuerza.Coef = 1;
		uLongitud = new Unidad();
		uLongitud.Designacion = "cm";
		uLongitud.Coef = 1;
		
		recubrimiento = 1.5;
		diamEstribos = 0.6;
		canRamasEstribos = 2;
		sepBarras = 2;
		
	}
	
	public void copyInto(SHGenerales generales)
	{
		generales.designacion = designacion.toString();
		uLongitud.copyInto(generales.uLongitud);
		uFuerza.copyInto(generales.uFuerza);
		hormigon.copyInto(generales.hormigon);
		acero.copyInto(generales.acero);
		generales.recubrimiento = recubrimiento;
		generales.diamEstribos = diamEstribos;
		generales.sepBarras = sepBarras;
		generales.descripcion = descripcion.trim();
	}
	
	//*****************************************************
	// Funciones JSON
	//*****************************************************	
	public void put_JSON(JSONObject jo){
		
		designacion = (String) jo.get("Designacion");
		JSONObject joAux = (JSONObject) jo.get("ULongitud");
		uLongitud.put_JSON(joAux);
		joAux = (JSONObject) jo.get("UFuerza");
		uFuerza.put_JSON(joAux);
		joAux = (JSONObject) jo.get("Hormigon");
		hormigon.put_JSON(joAux);
		joAux = (JSONObject) jo.get("Acero");
		acero.put_JSON(joAux);
		Object oo = jo.get("Recubrimiento");
		if (oo != null) recubrimiento = (Double) oo;
		oo = jo.get("DiamEstribos");
		if (oo != null) diamEstribos = (Double) oo;
		descripcion = ((String) jo.get("Descripcion")).replace('¬', '\n');
	}
	public JSONObject get_JSONObject() {
		JSONObject jo = new JSONObject();
		jo.put("Designacion", designacion);
		jo.put("ULongitud", uLongitud.get_JSONObject());
		jo.put("UFuerza", uFuerza.get_JSONObject());
		jo.put("Hormigon", hormigon.get_JSONObject());
		jo.put("Acero", acero.get_JSONObject());
		jo.put("Recubrimiento", recubrimiento);
		jo.put("DiamEstribos", diamEstribos);
		jo.put("Descripcion", descripcion);
		return jo;
	}
	public String get_JSONString(int tab) {
		String res = tabs(tab)+"{\n"; 
		res += tabs(tab+1)+"\"Designacion\":\""+designacion+"\",\n";
		res += tabs(tab+1)+"\"ULongitud\":"+uLongitud.get_JSONString()+",\n";
		res += tabs(tab+1)+"\"UFuerza\":"+uFuerza.get_JSONString()+",\n";
		res += tabs(tab+1)+"\"Hormigon\":\n"+hormigon.get_JSONString(tab+2)+",\n";
		res += tabs(tab+1)+"\"Acero\":\n"+acero.get_JSONString(tab+2)+",\n";
		res += tabs(tab+1)+"\"Recubrimiento\":"+recubrimiento+",\n";
		res += tabs(tab+1)+"\"DiamEstribos\":"+diamEstribos+",\n";
		res += tabs(tab+1)+"\"Descripcion\":\""+descripcion.replace('\n', '¬')+"\"\n";
		res += tabs(tab)+"}";
		return res;
	}
	private String tabs(int can) {
		String str = new String();
		for (int ii=0; ii<can; ii++) str += "   ";
		return str;
	}
	
}
